package com.ruoyi.system.service;

import com.ruoyi.system.domain.File;
import com.ruoyi.system.domain.dto.FileUploadDTO;
import com.ruoyi.system.domain.vo.FileUploadVO;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 文件上传Service接口
 * 
 * @author ruoyi
 * @date 2024-07-01
 */
public interface ISysFileService 
{
    /**
     * 查询文件上传
     * 
     * @param id 文件上传主键
     * @return 文件上传
     */
    public File selectSysFileById(Long id);

    /**
     * 查询文件上传列表
     * 
     * @param sysFile 文件上传
     * @return 文件上传集合
     */
    public List<File> selectSysFileList(File sysFile);

    /**
     * 新增文件上传
     * 
     * @param sysFile 文件上传
     * @return 结果
     */
    public int insertSysFile(File sysFile);

    /**
     * 修改文件上传
     * 
     * @param sysFile 文件上传
     * @return 结果
     */
    public int updateSysFile(File sysFile);

    /**
     * 批量删除文件上传
     * 
     * @param id 需要删除的文件上传主键集合
     * @return 结果
     */
    public int deleteSysFileByIds(Long id);

    /**
     * 删除文件上传信息
     * 
     * @param id 文件上传主键
     * @return 结果
     */
    public int deleteSysFileById(Long id);

    /**
     * 预上传
     * @param params
     * @return
     */
    FileUploadVO upload(FileUploadDTO params);

    /**
     * 获取每个分片的预签名上传地址
     * @param fileMd5 文件唯一标识
     * @param partNumber 分片
     * @return 文件预签名上传地址
     */
    String getPreSignUploadUrl(String fileMd5, Integer partNumber);

    /**
     * 合并分片
     * @param fileMd5 文件唯一标识
     */
    void merge(String fileMd5);

    /**
     * 下载
     * @param fileMd5
     * @param response
     */
    void download(String fileMd5, HttpServletResponse response);
}
